(c-indent-region): Keep looping till reach endmark.
authorRichard M. Stallman <rms@gnu.org>
Sun, 9 Jan 1994 21:27:07 +0000 (21:27 +0000)
committerRichard M. Stallman <rms@gnu.org>
Sun, 9 Jan 1994 21:27:07 +0000 (21:27 +0000)
Treat #-lines specially.

lisp/progmodes/c-mode.el

index 246beb149be14b79ed9dc5dc49296920114d0f39..2ffb2b822948b8a0b1e00805d88e1542fbb77a81 100644 (file)
@@ -1220,41 +1220,43 @@ If within a string or comment, move by sentences instead of statements."
     (beginning-of-line)
     (let ((endmark (copy-marker end))
          (c-tab-always-indent t))
-      (while (and (bolp) (not (eolp)))
+      (while (and (bolp) (not (eobp)) (< (point) endmark))
        ;; Indent one line as with TAB.
        (let ((shift-amt (c-indent-line))
              nextline sexpbeg sexpend)
-         (save-excursion
-           ;; Find beginning of following line.
+         (if (save-excursion (beginning-of-line) (looking-at "[ \t]*#"))
+             (forward-line 1)
            (save-excursion
-             (forward-line 1) (setq nextline (point)))
-           ;; Find first beginning-of-sexp for sexp extending past this line.
-           (beginning-of-line)
-           (while (< (point) nextline)
-             (condition-case nil
+             ;; Find beginning of following line.
+             (save-excursion
+               (forward-line 1) (setq nextline (point)))
+             ;; Find first beginning-of-sexp for sexp extending past this line.
+             (beginning-of-line)
+             (while (< (point) nextline)
+               (condition-case nil
+                   (progn
+                     (forward-sexp 1)
+                     (setq sexpend (point-marker)))
+                 (error (setq sexpend nil)
+                        (goto-char nextline)))
+               (skip-chars-forward " \t\n"))
+             (if sexpend
                  (progn
-                   (forward-sexp 1)
-                   (setq sexpend (point-marker)))
-               (error (setq sexpend nil)
-                      (goto-char nextline)))
-             (skip-chars-forward " \t\n"))
-           (if sexpend
+                   ;; Make sure the sexp we found really starts on the
+                   ;; current line and extends past it.
+                   (goto-char sexpend)
+                   (backward-sexp 1)
+                   (setq sexpbeg (point)))))
+           ;; If that sexp ends within the region,
+           ;; indent it all at once, fast.
+           (if (and sexpend (> sexpend nextline) (<= sexpend endmark)
+                    (< sexpbeg nextline))
                (progn
-                 ;; Make sure the sexp we found really starts on the
-                 ;; current line and extends past it.
-                 (goto-char sexpend)
-                 (backward-sexp 1)
-                 (setq sexpbeg (point)))))
-         ;; If that sexp ends within the region,
-         ;; indent it all at once, fast.
-         (if (and sexpend (> sexpend nextline) (<= sexpend endmark)
-                  (< sexpbeg nextline))
-             (progn
-               (indent-c-exp)
-               (goto-char sexpend)))
-         ;; Move to following line and try again.
-         (and sexpend (set-marker sexpend nil))
-         (forward-line 1)))
+                 (indent-c-exp)
+                 (goto-char sexpend)))
+           ;; Move to following line and try again.
+           (and sexpend (set-marker sexpend nil))
+           (forward-line 1))))
       (set-marker endmark nil))))
 \f
 (defun set-c-style (style &optional global)